[HVM] Fix shadow remove-write-access heuristic for 64bit w2k3 linear map.
authorTim Deegan <Tim.Deegan@xensource.com>
Tue, 8 May 2007 09:32:05 +0000 (10:32 +0100)
committerTim Deegan <Tim.Deegan@xensource.com>
Tue, 8 May 2007 09:32:05 +0000 (10:32 +0100)
Signed-off-by: Tim Deegan <Tim.Deegan@xensource.com>
xen/arch/x86/mm/shadow/common.c

index 2f5c7ba557e1676bf46e4dad9f90585113e7c2da..a4598e4bc22d0bda562a0a2198704cb6a959ad3b 100644 (file)
@@ -1764,12 +1764,15 @@ int sh_remove_write_access(struct vcpu *v, mfn_t gmfn,
 #if CONFIG_PAGING_LEVELS >= 4
         else if ( v->arch.paging.mode->guest_levels == 4 )
         {
-            /* 64bit w2k3: linear map at 0x0000070000000000 */
+            /* 64bit w2k3: linear map at 0xfffff68000000000 */
             switch ( level ) 
             {
-            case 1: GUESS(0x70000000000UL + (fault_addr >> 9), 3); break;
-            case 2: GUESS(0x70380000000UL + (fault_addr >> 18), 3); break;
-            case 3: GUESS(0x70381C00000UL + (fault_addr >> 27), 3); break;
+            case 1: GUESS(0xfffff68000000000UL 
+                          + ((fault_addr & VADDR_MASK) >> 9), 3); break;
+            case 2: GUESS(0xfffff6fb40000000UL
+                          + ((fault_addr & VADDR_MASK) >> 18), 3); break;
+            case 3: GUESS(0xfffff6fb7da00000UL 
+                          + ((fault_addr & VADDR_MASK) >> 27), 3); break;
             }
 
             /* 64bit Linux direct map at 0xffff810000000000; older kernels